package com.sx.pipeline.repos.http.service

import com.sx.pipeline.app.config.BaseEntity
import com.sx.pipeline.repos.http.req.*
import com.sx.pipeline.repos.http.res.*
import io.reactivex.rxjava3.core.Observable
import okhttp3.RequestBody
import retrofit2.http.*

/**
 * @Author: YY
 * @Date: 2022/4/5
 * @Description: API请求接口
 */
interface IApiService {

    /**
     * 获取省市区数据
     */
    @GET("/api/system/address/getAddressTree")
    fun getProvinces(): Observable<BaseEntity<List<ProvincesVO>>>

    /**
     * 查询单位类型
     */
    @GET("/api/system/unitType/getRegister")
    fun getUnitType(@Query("id") identityID:Int?=null): Observable<BaseEntity<List<UnitTypeVO>>>

    /**
     * 查询单位名称
     */
    @GET("/api/system/unit/list")
    fun getUnitNameList(
        @Query("name") name: String? = null,
        @Query("areaId") areaId: Int = 0,
        @Query("typeAttribute") typeAttribute: String? = null,
        @Query("unitTypeId") unitTypeId: String? = null,
        @Query("identity") identity: Int,
        @Query("isPage") isPage: Boolean = true,
        @Query("page") page: Int = 1,
        @Query("limit") limit: Int = 10,
    ): Observable<BaseEntity<Ipage<UnitNameVO>>>

    /**
     * 注册 查询单位名称
     */
    @GET("/api/system/unit/registerList")
    fun getRegUnitNameList(
        @Query("name") name: String? = null,
        @Query("areaId") areaId: Int = 0,
        @Query("typeAttribute") typeAttribute: String? = null,
        @Query("unitTypeId") unitTypeId: String? = null,
        @Query("identity") identity: Int,
        @Query("isPage") isPage: Boolean = true,
        @Query("page") page: Int = 1,
        @Query("limit") limit: Int = 10,
    ): Observable<BaseEntity<Ipage<UnitNameVO>>>

    /**
     * 注册发送验证码
     */
    @GET("/api/utils/smsCode")
    fun sendSmsCode(
        @Query("phone") phone: String,
        @Query("type") type: Int?,
    ): Observable<BaseEntity<Boolean>>

    /**
     * 协议内容
     */
    @GET("/api/system/agreement/{id}")
    fun getAgreement(@Path("id") id: Long): Observable<BaseEntity<AgreementVO>>

    /**
     * 注册
     */
    @POST("/api/register")
    fun register(@Body dto: RegisterDTO): Observable<BaseEntity<Boolean>>

    /**
     * 登录
     */
    @POST("/tokenLogin")
    fun login(@Body dto: LoginDTO): Observable<BaseEntity<LoginVO>>

    /**
     * 注销账号
     */
    @POST("/api/system/user/userLogout")
    fun cancelAccount(): Observable<BaseEntity<Any>>

    /**
     * 绑定手机号
     */
    @POST("/bindPhone")
    fun bindPhone(@Body dto: BindPhoneDTO): Observable<BaseEntity<LoginVO>>

    /**
     * 修改密码
     * TODO:0:修改密码，1:修改支付密码
     */
    @POST("/forgotPassword")
    fun modifyPassword(@Body dto: ModifyPwdDTO): Observable<BaseEntity<Boolean>>

    /**
     * 获取用户信息
     */
    @GET("/api/system/user/getPersonalCenter")
    fun getUserInfo(): Observable<BaseEntity<UserInfoVO>>

    /**
     * 获取通知类型列表
     */
    @GET("/api/app/notice/getNoticeTypeList")
    fun getNoticeTypeList(): Observable<BaseEntity<List<MessageTypeVo>>>

    /**
     * 获取通知列表
     */
    @GET("/api/app/notice/getNoticeByCode")
    fun getNoticeByCode(
        @Query("code") code: Int,
        @Query("page") phone: Int,
    ): Observable<BaseEntity<Ipage<MessageListVo>>>

    /**
     * 消息详情
     */
    @POST("/api/app/notice/getNoticeDetail")
    fun getNoticeDetail(@Body dto: MessageDTO): Observable<BaseEntity<MessageDetailVo>>

    /**
     * 全部已读
     */
    @POST("/api/app/notice/allHaveRead")
    fun getAllHaveRead(): Observable<BaseEntity<Boolean>>

    /**
     * 获取任务配置数据
     */
    @GET("/api/system/dataConfig/getTask")
    fun getTask(): Observable<BaseEntity<TaskConfigVo>>

    /**
     * 获取单位下所有联系人
     */
    @GET("/api/system/user/getContacts")
    fun getContacts(): Observable<BaseEntity<List<TaskContactVo>>>

    /**
     * 添加任务
     */
    @POST("/api/oms/task/add")
    fun getTaskAdd(@Body dto: TaskAddDTO): Observable<BaseEntity<TaskGroupVO>>


    /**
     * 获取需求配置数据
     */
    @GET("/api/system/dataConfig/getNeed")
    fun getNeed(): Observable<BaseEntity<TaskConfigVo>>

    /**
     * 图片上传
     */
    @POST("/api/utils/upload")
    fun uploadImage(
        @Body body: RequestBody?,
    ): Observable<BaseEntity<String>>

    /**
     * 获取任务发布列表
     */
    @GET("/api/oms/task/putTaskList")
    fun putTaskList(
        @Query("status") status: Int,
        @Query("page") page: Int,
        @Query("isPage") isPage: Boolean,
        @Query("limit") limit: Int,
    ): Observable<BaseEntity<Ipage<ReleaseTaskVo>>>

    /**
     * 取消任务
     */
    @POST("/api/oms/task/cancel/{id}")
    fun getCancelTask(@Path("id") id: Int): Observable<BaseEntity<Any>>

    /**
     * 结束任务
     */
    @POST("/api/oms/task/endTask/{id}")
    fun getEndTask(@Path("id") id: Int): Observable<BaseEntity<Any>>

    /**
     * 删除任务
     */
    @DELETE("/api/oms/task/remove/{id}")
    fun getRemoveTask(@Path("id") id: Int): Observable<BaseEntity<Any>>

    /**
     * 任务延期
     */
    @POST("/api/oms/task/delay")
    fun getTaskDelay(@Body dto: TaskDelayDTO): Observable<BaseEntity<Any>>

    /**
     * 获取我参与的任务列表
     */
    @GET("/api/oms/task/TakePartTaskList")
    fun takePartTaskList(
        @Query("status") status: Int,
        @Query("page") page: Int,
        @Query("isPage") isPage: Boolean,
        @Query("limit") limit: Int,
    ): Observable<BaseEntity<Ipage<ReleaseTaskVo>>>


    /**
     * 获取我审批的任务列表
     */
    @GET("/api/oms/task/auditTaskList")
    fun auditTaskList(
        @Query("status") status: Int,
        @Query("page") page: Int,
        @Query("isPage") isPage: Boolean,
        @Query("limit") limit: Int,
    ): Observable<BaseEntity<Ipage<ReleaseTaskVo>>>

    /**
     * 审核任务
     */
    @POST("/api/oms/task/audit")
    fun getTaskAudit(@Body dto: AuditTaskDTO): Observable<BaseEntity<TaskGroupVO>>

    /**
     * 处理任务
     */
    @POST("/api/oms/task/dealWith")
    fun dealWithTask(@Body dto: DealTaskDTO): Observable<BaseEntity<Any>>

    /**
     * 获取登录单位信息
     */
    @GET("/api/system/user/unit")
    fun getUserUnit(): Observable<BaseEntity<UserUnitVo>>

    /**
     * 获取任务详情
     */
    @GET("/api/oms/task/detail/{id}")
    fun getTaskDetail(@Path("id") id: Int): Observable<BaseEntity<TaskDetailVo>>


    /**
     * 获取供应配置数据
     */
    @GET("/api/system/dataConfig/getSupply")
    fun getSupply(): Observable<BaseEntity<TaskConfigVo>>

    /**
     * 添加设备台账
     */
    @POST("/api/pms/equipment/add")
    fun equipmentAdd(@Body dto: EquipmentAddDTO): Observable<BaseEntity<Any>>

    /**
     * 编辑设备台账
     */
    @POST("/api/pms/equipment/edit")
    fun equipmentEdit(@Body dto: EquipmentAddDTO): Observable<BaseEntity<Any>>

    /**
     * 获取我的台账设备列表
     */
    @GET("/api/pms/equipment/list")
    fun getEquipmentList(
        @Query("key") key: String,
        @Query("page") page: Int,
        @Query("isPage") isPage: Boolean,
        @Query("limit") limit: Int
    ): Observable<BaseEntity<Ipage<DeviceInfoVo>>>

    /**
     * 获取我的服务设备列表
     */
    @GET("/api/pms/pmsServer/page")
    fun getPmsServiceList(
        @Query("key") key: String,
        @Query("page") page: Int,
        @Query("isPage") isPage: Boolean,
        @Query("limit") limit: Int
    ): Observable<BaseEntity<Ipage<ServiceAddDTO>>>

    /**
     * 添加服务设备
     */
    @POST("/api/pms/pmsServer/insert")
    fun addServiceDevice(@Body dto: ServiceAddDTO): Observable<BaseEntity<Any>>

    /**
     * 添加服务设备
     */
    @PUT("/api/pms/pmsServer/edit")
    fun editServiceDevice(@Body dto: ServiceAddDTO): Observable<BaseEntity<Any>>

    /**
     * 获取服务标题列表
     */
    @GET("/api/system/dataConfig/getServer")
    fun getServiceTitle(
    ): Observable<BaseEntity<List<ServiceTitleVO>>>

    /**
     * 设备详情
     */
    @GET("/api/pms/equipment/getDetail/{id}")
    fun getDeviceDetail(@Path("id") id: Int): Observable<BaseEntity<DeviceInfoVo>>

    /**
     * 删除设备
     */
    @DELETE("/api/pms/equipment/delete/{id}")
    fun getEquipmentDelete(@Path("id") id: Int): Observable<BaseEntity<Any>>


    /**
     * 添加供应
     */
    @POST("/api/oms/supplyOrder/add")
    fun supplyOrderAdd(@Body dto: SupplyOrderAddDTO): Observable<BaseEntity<Any>>

    /**
     * 获取我发布的供应列表
     */
    @GET("/api/oms/supplyOrder/pushSupplyPage")
    fun pushSupplyPage(
        @Query("status") status: Int,
        @Query("page") page: Int,
        @Query("isPage") isPage: Boolean,
        @Query("limit") limit: Int
    ): Observable<BaseEntity<Ipage<ReleaseSupplyVo>>>

    /**
     * 获取审批供应列表
     */
    @GET("/api/oms/supplyOrder/auditSupplyList")
    fun auditSupplyList(
        @Query("status") status: Int,
        @Query("page") page: Int,
        @Query("isPage") isPage: Boolean,
        @Query("limit") limit: Int
    ): Observable<BaseEntity<Ipage<ReleaseSupplyVo>>>

    /**
     * 获取产品配置数据
     */
    @GET("/api/system/dataConfig/getProduct")
    fun getProduct(): Observable<BaseEntity<TaskConfigVo>>

    /**
     * 删除商品
     */
    @DELETE("/api/pms/product/delete/{id}")
    fun deleteProduct(@Path("id") id: Int): Observable<BaseEntity<Any>>

    /**
     * 添加商品
     */
    @POST("/api/pms/product/add")
    fun productAdd(@Body dto: GoodsAddDTO): Observable<BaseEntity<Any>>

    /**
     * 编辑商品
     */
    @POST("/api/pms/product/edit")
    fun productEdit(@Body dto: GoodsAddDTO): Observable<BaseEntity<Any>>

    /**
     * 获取我的商品列表
     */
    @GET("/api/pms/product/page")
    fun getProductList(
        @Query("key") key: String,
        @Query("page") page: Int,
        @Query("isPage") isPage: Boolean,
        @Query("limit") limit: Int
    ): Observable<BaseEntity<Ipage<GoodsInfoVo>>>


    /**
     * 获取广告宣传 单位 背景图 商品列表
     */
    @GET("/api/app/publicity/getDetail/{id}")
    fun getAdvertisingDetail(
        @Path("id") id: Int,
        @Query("page") page: Int,
        @Query("isPage") isPage: Boolean,
        @Query("limit") limit: Int
    ): Observable<BaseEntity<AdvertiseDetailVO>>

    /**
     * 广告介绍 内容
     */
    @GET("/api/app/publicity/getContent/{id}")
    fun getAdvertisingIntro(@Path("id") id: Int): Observable<BaseEntity<AgreementVO>>

    /**
     * 商品详情
     */
    @GET("/api/pms/product/getDetail/{id}")
    fun getGoodsDetail(@Path("id") id: Int): Observable<BaseEntity<GoodsInfoVo>>


    /**
     * 轮播图
     */
    @GET("/api/app/banner/list")
    fun getBannerList(): Observable<BaseEntity<List<BannerVO>>>

    /**
     * 审核供应
     */
    @POST("/api/oms/supplyOrder/audit")
    fun getSupplyAudit(@Body dto: AuditTaskDTO): Observable<BaseEntity<Any>>

    /**
     * 供应详情
     */
    @GET("/api/oms/supplyOrder/getDetail/{id}")
    fun getSupplyOrderDetail(@Path("id") id: Int): Observable<BaseEntity<SupplyDetailVo>>

    /**
     * 获取我的商品列表
     */
    @GET("/api/oms/supplyOrder/takePartSupplyList")
    fun takePartSupplyList(
        @Query("key") key: String,
        @Query("page") page: Int,
        @Query("isPage") isPage: Boolean,
        @Query("limit") limit: Int
    ): Observable<BaseEntity<Ipage<ReleaseSupplyVo>>>


    /**
     * 施工单位添加询价
     */
    @POST("/api/oms/supplyOrder/addInquiry")
    fun addInquiry(@Body dto: AddInquiryDTO): Observable<BaseEntity<Any>>

    /**
     * 询价列表
     */
    @GET("/api/oms/supplyOrder/inquiryList")
    fun getInquiryList(
        @Query("orderId") page: Int,
    ): Observable<BaseEntity<List<ViewInquiryVo>>>

    /**
     * 取消订单
     */
    @POST("/api/oms/supplyOrder/cancel/{id}")
    fun cancelSupplyOrder(@Path("id") id: Int): Observable<BaseEntity<Any>>


    /**
     * 删除供应
     */
    @DELETE("/api/oms/supplyOrder/delete/{id}")
    fun deleteSupplyOrder(@Path("id") id: Int): Observable<BaseEntity<Any>>

    /**
     * 取消需求
     */
    @POST("/api/oms/needOrder/cancel/{id}")
    fun cancelNeedOrder(@Path("id") id: Int): Observable<BaseEntity<Any>>

    /**
     * 删除需求
     */
    @DELETE("/api/oms/needOrder/delete/{id}")
    fun deleteNeedOrder(@Path("id") id: Int): Observable<BaseEntity<Any>>

    /**
     * 运营商 发布需求
     */
    @POST("/api/oms/needOrder/add")
    fun addNeedOrder(@Body dto: ReleaseNeedsAddDTO): Observable<BaseEntity<Int>>

    /**
     * 获取运营商需求列表
     */
    @GET("/api/oms/needOrder/operationPushNeedPage")
    fun operationPushNeedPage(
        @Query("status") status: Int,
        @Query("page") page: Int,
        @Query("isPage") isPage: Boolean,
        @Query("limit") limit: Int
    ): Observable<BaseEntity<Ipage<ReleaseNeedsVO>>>

    /**
     * 施工单位 发布需求
     */
    @POST("/api/oms/needOrder/twoAdd")
    fun addConstructionNeedOrder(@Body dto: ReleaseNeedsAddDTO): Observable<BaseEntity<Any>>

    /**
     * 施工单位 编辑需求 重新提交
     */
    @PUT("/api/oms/needOrder/againPush")
    fun editConstructionNeedOrder(@Body dto: ReleaseNeedsAddDTO): Observable<BaseEntity<Any>>

    /**
     * 获取施工单位/供应商 我参与的需求列表
     */
    @GET("/api/oms/needOrder/takePartNeedPage")
    fun takePartNeedPage(
        @Query("key") key: String,
        @Query("page") page: Int,
        @Query("isPage") isPage: Boolean,
        @Query("limit") limit: Int
    ): Observable<BaseEntity<Ipage<ReleaseNeedsVO>>>

    /**
     * 获取施工单位 我发布的需求列表
     */
    @GET("/api/oms/needOrder/pushNeedPage")
    fun pushNeedPageList(
        @Query("status") status: Int,
        @Query("page") page: Int,
        @Query("isPage") isPage: Boolean,
        @Query("limit") limit: Int
    ): Observable<BaseEntity<Ipage<ReleaseNeedsVO>>>


    /**
     * 获取施工单位 我审批的需求列表
     */
    @GET("/api/oms/needOrder/auditNeedPage")
    fun auditNeedPage(
        @Query("status") status: Int,
        @Query("page") page: Int,
        @Query("isPage") isPage: Boolean,
        @Query("limit") limit: Int
    ): Observable<BaseEntity<Ipage<ReleaseNeedsVO>>>


    /**
     * 审核需求
     */
    @POST("/api/oms/needOrder/audit")
    fun getNeedOrderAudit(@Body dto: AuditTaskDTO): Observable<BaseEntity<Any>>

    /**
     * 获取需求详情
     */
    @GET("/api/oms/needOrder/getDetail/{id}")
    fun getNeedOrderDetail(@Path("id") id: Int): Observable<BaseEntity<ReleaseNeedsVO>>


    /**
     * 获取学习中心列表
     */
    @GET("/api/app/centre/findPage")
    fun getLearningStudy(
        @Query("page") page: Int,
        @Query("isPage") isPage: Boolean,
        @Query("limit") limit: Int
    ): Observable<BaseEntity<Ipage<StudyCenterVO>>>

    /**
     * 修改用户信息
     */
    @POST("/api/system/user/update")
    fun updateUser(@Body dto: ResetUserDTO): Observable<BaseEntity<Any>>


    /**
     * 获取广告宣传列表
     */
    @GET("/api/app/publicity/findPage")
    fun getAdvertiseList(
        @Query("page") page: Int,
        @Query("isPage") isPage: Boolean,
        @Query("limit") limit: Int
    ): Observable<BaseEntity<Ipage<AdvertiseVO>>>

    /**
     * 供应商添加报价
     */
    @POST("/api/oms/needOrder/addQuotedPrice")
    fun addQuotedPrice(@Body dto: AddQuotedPriceDTO): Observable<BaseEntity<Any>>

    /**
     * 报价列表
     */
    @GET("/api/oms/needOrder/getQuotedPrice/{id}")
    fun getQuotedPrice(@Path("id") id: Int): Observable<BaseEntity<List<NeedsQuotedVO>>>

    /**
     * 任务评价
     */
    @POST("/api/oms/task/evaluate")
    fun addTaskEvaluate(@Body dto: List<TaskEvaluateDTO>): Observable<BaseEntity<Any>>

    /**
     * 任务评价列表
     */
    @GET("/api/oms/task/getEvaluate/{id}")
    fun getEvaluate(@Path("id") id: Int): Observable<BaseEntity<List<TaskEvaluateVO>>>

    /**
     * 服务设备详情
     */
    @GET("/api/pms/pmsServer/getDetail/{id}")
    fun getServiceDeviceDetail(@Path("id") id: Int): Observable<BaseEntity<ServiceAddDTO>>

    /**
     * 删除服务设备
     */
    @DELETE("/api/pms/pmsServer/delete/{id}")
    fun getServiceDelete(@Path("id") id: Int): Observable<BaseEntity<Any>>

    /**
     * 意见反馈
     */
    @FormUrlEncoded
    @POST("/api/system/opinion/add")
    @Headers("Content-Type:application/x-www-form-urlencoded; charset=utf-8")
    fun addFeedback(
        @Field("content") content: String,
    ): Observable<BaseEntity<Any>>


    /**
     * app版本更新
     */
    @GET("/api/app/version/getAndroid")
    fun getAppVersion(): Observable<BaseEntity<VersionUpdateVO>>

    /**
     * 发布供应 计算管币价格
     */
    @GET("/api/oms/supplyOrder/getPrice")
    fun getSupplyPrice(
        @Query("serverId") serverId: Int,
        @Query("startTime") startTime: String,
        @Query("endTime") endTime: String
    ): Observable<BaseEntity<Double>>


    /**
     * 添加银行卡
     */
    @POST("/api/ums/bankCard/add")
    fun addBankCard(@Body dto: AddBankDTO): Observable<BaseEntity<Any>>

    /**
     * 获取银行卡列表
     */
    @GET("/api/ums/bankCard/pageByBankCard")
    fun getBankCardList(
        @Query("page") page: Int,
        @Query("isPage") isPage: Boolean,
        @Query("limit") limit: Int
    ): Observable<BaseEntity<Ipage<BankListVO>>>

    /**
     * 解绑银行卡
     */
    @DELETE("/api/ums/bankCard/deleteById/{id}")
    fun deleteBank(@Path("id") id: Int): Observable<BaseEntity<Any>>

    /**
     * 获取钱包记录列表
     */
    @GET("/api/ums/wallet/pageByBill")
    fun getWalletBillList(
        @Query("income") income: String,
        @Query("page") page: Int,
        @Query("isPage") isPage: Boolean,
        @Query("limit") limit: Int
    ): Observable<BaseEntity<Ipage<BalanceRecordVO>>>

    /**
     * 提现
     */
    @POST("/api/ums/bankCard/withdraw")
    fun getWithdraw(@Body dto: WithdrawDTO): Observable<BaseEntity<Any>>


    /**
     * 获取提现记录
     */
    @GET("/api/ums/bankCard/findWithdrawByPage")
    fun findWithdrawByPage(
        @Query("status") status: Int,
        @Query("page") page: Int,
        @Query("isPage") isPage: Boolean,
        @Query("limit") limit: Int
    ): Observable<BaseEntity<Ipage<WithdrawRecordVO>>>

    /**
     * 发布需求 计算管币价格
     */
    @GET("/api/oms/needOrder/getPrice")
    fun getNeedPrice(): Observable<BaseEntity<Double>>

    /**
     * 供应询价 获取管币价格
     */
    @GET("/api/oms/supplyOrder/inquiryPrice")
    fun getInquiryPrice(): Observable<BaseEntity<Double>>

    /**
     * 需求报价 获取管币价格
     */
    @GET("/api/oms/needOrder/getNeedQuote")
    fun getNeedQuote(): Observable<BaseEntity<Double>>

    /**
     * 充值套餐列表
     */
    @GET("/api/ums/wallet/rechargeList")
    fun getRechargeList(): Observable<BaseEntity<List<RechargeInfoVO>>>


    /**
     * 微信充值
     */
    @POST("/api/ums/wallet/wxRecharge/{id}")
    fun sumitWxRecharge(@Path("id") id: Int): Observable<BaseEntity<WechatResponse>>

    /**
     * 支付宝充值
     */
    @POST("/api/ums/wallet/zfb/recharge")
    fun submitAliPayRecharge(@Body body: AliPayRechargeReq): Observable<BaseEntity<String>>
    /**
     * 加入群聊
     */
    @POST("/api/oms/task/addImGroup/{orderId}")
    fun requestJoinGroup(@Path("orderId") id: Int): Observable<BaseEntity<Any>>

    /**
     * 添加行政区域负责区域
     */
    @POST("/api/system/area/administrativeAdd")
    fun addAdministrative(@Body dto: AddAdministrativeDTO): Observable<BaseEntity<Any>>

    /**
     *获取客服融云ID
     */
    @GET("/api/ums/ry/artificial")
    fun getImId(): Observable<BaseEntity<ContactUserVo>>


    @GET("/api/system/userAudit/list")
    fun getExamineOperatorList(
        @Query("status")status: Int,
        @Query("page") page: Int = 1,
        @Query("limit") limit: Int = 10,
    ): Observable<BaseEntity<Ipage<ExamineOperatorVo>>>

    @GET("/api/system/userAudit/applyList")
    fun getExamineRecordList(
        @Query("status")status: Int,
        @Query("page") page: Int = 1,
        @Query("limit") limit: Int = 10,
    ): Observable<BaseEntity<Ipage<ExamineRecordVo>>>

    @POST("/api/system/userAudit/audit")
    fun audit(@Body dto: AuditDTO): Observable<BaseEntity<Any>>

    @GET("/api/system/userAudit/getApply/{id}")
    fun applyInfo(@Path("id")id: String):Observable<BaseEntity<ExamineInfoVo>>

    @POST("/api/app/chat/complaint/groupComplaint")
    fun groupReport(@Body dto : ReqGroupReportDTO): Observable<BaseEntity<Any>>

    @POST("/api/app/chat/complaint/userComplaint")
    fun userReport(@Body dto : ReqUserReportDTO): Observable<BaseEntity<Any>>

}